package czolgisci.map;

import java.awt.Point;
import java.io.IOException;

import czolgisci.tiles.ATile;
import utils.Sprite;

/**
 * Klasa która przegląda klasę MapManagerIterator i zwraca po kolei
 * wszystkie elementy w postaci obiektów "Sprite"
 * 
 * @author kasztan
 * @version 1.0
 */
public class MapManagerIterator implements ISpritesIterator
{

	private MapManager mapManagerInstance;
	private int i, j, mapWidth, mapHeight;
	private boolean ended;
	
	public MapManagerIterator(MapManager mapManagerIns) throws IllegalArgumentException
	{
		if(mapManagerIns == null)
		{
			throw new IllegalArgumentException();
		}
		mapManagerInstance = mapManagerIns;
		i = -2;
		j = 0;
		ended = false;
		mapHeight = mapManagerInstance.getVerticalTilesNum(); // pionowy
		mapWidth = mapManagerInstance.getHorizontalTilesNum(); // poziomy
		
	}
	/* (non-Javadoc)
	 * @see java.util.Iterator#hasNext()
	 */
	public boolean hasNext()
	{
		return !ended;
	}

	/* (non-Javadoc)
	 * @see java.util.Iterator#next()
	 */
	public Sprite next()
	{
		if(i == -2) // pierwszy element - tło mapy
		{
			i = -1;
			try
			{
				return new Sprite(mapManagerInstance.getBackground(), new Point(0, 0));
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
		// pierwszy element tablicy
		if(++i >= mapWidth) 
		{
			i = 0; // element przekroczył zakres, przechodzimy
			j++;   // do nastepnego wiersza
		}
		
		if(i == mapWidth - 1 && j == mapHeight - 1) // jesli nastepny element to koniec
		{
			ended = true;
		}
		
		ATile tmp = mapManagerInstance.getTileFromIJ(i, j);
		if(tmp == null)
			return next();
		else
			return new Sprite(tmp.getImage(), tmp.getPosition());
	}

	/* (non-Javadoc)
	 * @see java.util.Iterator#remove()
	 */
	public void remove()
	{
		// nie można usunąć elementu
	}

}
